#include <iostream>
#include <unistd.h>
#include <string.h>
#include "ShareMemory.hpp"
#include "Time.hpp"
#include "Fifp.hpp"

int main()
{
    std::cout << "time: " << GetCurrTime() << std::endl;
    shm.CreateShm();
    shm.AttachShm();

    gpipe.OpenPipeForRead();
    // 进行IPC
    struct data *image =(struct data*)shm.GetAddr();
    
    while(true)
    {
        gpipe.Wait();
         
        printf("status: %s\n", image->status);
        printf("lasttime: %s\n", image->lasttime);
        printf("image: %s\n", image->image);
        strcpy(image->status, "过期");
        //sleep(1);
    }

    shm.DetachShm();
    shm.DeleteShm();
    return 0;
}









// int main()
// {
//     shm.CreateShm();
//     shm.AttachShm();

//     // 进行IPC
//     char *strinfo =(char*)shm.GetAddr();

//     //检测： Server 和 client 映射虚拟地址不同
//     // sleep(5);
//     // printf("server 虚拟地址：%p\n", strinfo); 
//     // sleep(5);

//     while(true)
//     {
//        printf("%s\n", strinfo);
//        sleep(1);
//     }

//     shm.DetachShm();
//     shm.DeleteShm();
//     return 0;
// }





// int main()
// {
//     shm.CreateShm();
//     shm.AttachShm();

//     sleep(5);
//     std::cout << "server attach done" << std::endl;

//     shm.DetachShm();
//     std::cout << "server detach done" << std::endl;
//     sleep(5);

//     shm.DeleteShm();
//     std::cout <<  "server delete done" << std::endl;

//     return 0;
// }




// int main()
// {
//     int shmid = shm.CreateShm();
    
//     void *addr = shm.AttachShm(shmid);
//     sleep(5);
//     std::cout << "server attach done" << std::endl;

//     shm.DetachShm(addr);
//     std::cout << "server detach done" << std::endl;
//     sleep(5);

//     shm.DeleteShm(shmid);
//     std::cout <<  "server delete done" << std::endl;

//     return 0;
// }





// int main()
// {
//     // 1. 创建 key
//     key_t k = ::ftok(gpath.c_str(), gprojId);
//     //std::cout << "k : " << k << std::endl;
//     if(k < 0)
//     {
//         std::cerr << "ftok error"  << std::endl;
//         return 1;
//     }
//     std::cout << "k : " << ToHex(k) << std::endl;
    
//     // 2. 创建共享内存 %% 获取
//     int shmid = ::shmget(k, gshmsize, IPC_CREAT | IPC_EXCL | gmode);
//     if(shmid < 0)
//     {
//         std::cerr << "shmget error" << std::endl;
//         return 2;
//     }
//     std::cout << "shmid: " << shmid << std::endl;

//     sleep(5);

//     // 3. 共享内存挂接到自己的内存空间
//     void *ret = shmat(shmid, nullptr, 0); // 为什么会失败
//     std::cout << "attach done: " <<(long long) ret << std::endl;
    
//     sleep(5);
//     // 在这里进行通信！

//     ::shmdt(ret); // 去关联
//     std::cout << "detach done: " << std::endl;

//     // n. 删除共享内存
//     shmctl(shmid, IPC_RMID, nullptr);
//     std::cout << "delete shm done" << std::endl;
//     sleep(5);
//     return 0;
// }